home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nebula 2
/
Nebula Two.iso
/
SourceCode
/
MiniExamples
/
AppKit
/
ConvertXYtoChar
/
TurboText.m
< prev
Wrap
Text File
|
1995-06-12
|
3KB
|
93 lines
/* TurboText.m
* Purpose: A subclass of the Text object. This is necessary in order
* to over-ride mouseDown. The -convertPoint: method posts a fake
* mouse up event at the desired x,y coordinate location. It then sets
* an internal flag and calls mouseDown with a fake mouse down event.
* The end result is that the Text object will believe that the user has
* clicked the mouse on the desired location and will cause a selection
* at the appropriate point.
*
* You may freely copy, distribute, and reuse the code in this example.
* NeXT disclaims any warranty of any kind, expressed or implied, as to its
* fitness for any particular use.
*
* Written by: Sharon Zakhour
* Created: 22/July/91
*
*/
#import <dpsclient/event.h>
#import "TurboText.h"
@implementation TurboText
- initFrame: (const NXRect *)frameRect
{
[super initFrame:frameRect];
convert = NO;
charPos = -1;
return self;
}
- mouseDown:(NXEvent *)theEvent
{
NXSelPt origStart, origEnd;
if (convert)
{
/* Squirrel away the original selection */
[self getSel: &origStart :&origEnd];
/* This is to hide the modified selection from the user */
/* We want to avoid any flickering the user may see */
[window disableFlushWindow];
}
/* Let the mouseDown in the text object do it's stuff... */
[super mouseDown:theEvent];
if (convert)
{
NXSelPt newStart, newEnd;
/* Get the new character position and snarf it away */
[self getSel: &newStart : &newEnd];
charPos = newStart.cp;
/* Restore the original selection */
[self setSel: origStart.cp :origEnd.cp];
[window reenableFlushWindow];
convert = NO;
}
return self;
}
- (int)convertPoint: (NXPoint *)myPoint
{
NXEvent postEvent = (NXEvent)*[NXApp currentEvent];
/* Post the mouse up event to the queue */
convert = YES;
[self convertPoint: myPoint toView:nil];
postEvent.location.x = myPoint->x;
postEvent.location.y = myPoint->y;
postEvent.type = NX_MOUSEUP;
DPSPostEvent(&postEvent, YES);
/* Call the Text object with the mouse down event... */
/* It will process the mouse down event followed by the */
/* mouse up event which it will pluck off the queue. */
/* These fake events will cause the mouseDown code */
/* to make a selection at the desired location. The character */
/* position can then be extracted from the start point of the */
/* selection. */
postEvent.type = NX_MOUSEDOWN;
postEvent.data.mouse.click = 1;
[self mouseDown:&postEvent];
return charPos;
}
@end